package org.jypj.dev.dao;

import org.apache.ibatis.annotations.Param;
import org.jypj.dev.model.GiveWork;
import org.jypj.dev.model.Road;
import org.jypj.dev.util.Page;
import org.jypj.dev.vo.RoadUserVo;

import java.util.List;
import java.util.Map;

public interface IGiveWorkDao {


    /**
     * 保存
     * 所有字段全都保存
     *
     * @param giveWork
     * @return 保存后的对象包括ID
     */
    public int saveGiveWork(GiveWork giveWork);

    /**
     * 保存
     * 所有字段全都保存
     *
     * @param giveWorks
     * @return 保存后的对象包括ID
     */
    public int saveGiveWorks(List<GiveWork> giveWorks);

    /**
     * 根据ID删除
     *
     * @param id 主键ID
     * @return 删除记录数
     */
    public int deleteGiveWorkById(String id);

    /**
     * 根据对象删除
     *
     * @param giveWork
     * @return
     */
    public int deleteGiveWorkByObject(GiveWork giveWork);


    /**
     * 更新
     * 更新所有字段
     *
     * @param giveWork
     * @return 保存后的对象包括ID
     */
    public int updateGiveWork(GiveWork giveWork);

    /**
     * 更新
     * 更新所有字段
     *
     * @return 保存后的对象包括ID
     */
    public int updateIsRemind(@Param("giveWorkIds") String giveWorkIds);

    /**
     * 按ID查询
     *
     * @return GiveWork
     * @parm id 主键ID
     */
    public GiveWork selectGiveWorkById(String id);

    /**
     * 分页查询 包含条件
     *
     * @param page 分页对象
     * @param map  查询条件
     * @return List<GiveWork>
     */
    public List<GiveWork> selectOnePageByMap(Page page, Map<String, Object> map);

    /**
     * 分页查询 包含对象条件
     *
     * @param page     分页对象
     * @param giveWork 查询对象
     * @return List<GiveWork>
     */
    public List<GiveWork> selectOnePageByGiveWork(Page page, GiveWork giveWork);

    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<GiveWork>
     */
    public List<GiveWork> selectAllByMap(Map<String, Object> map);


    /**
     * 按条件查询全部的
     *
     * @param map 查询条件
     * @return List<GiveWork>
     */
    List<RoadUserVo> selectAllRoadUserByMap(Map<String, Object> map);

    /**
     * 按条件查询全部的
     *
     * @return List<GiveWork>
     */
    public List<GiveWork> selectAllByGiveWork(GiveWork giveWork);

    /**
     * 查询派班的人
     *
     * @param giveWork
     * @return
     */
    public List<GiveWork> selectAllRoadGiveWork(GiveWork giveWork);


    /**
     * 按条件查询单个对象
     *
     * @param map 查询条件
     * @return GiveWork
     */
    public GiveWork selectObjectByMap(Map<String, Object> map);

    /**
     * 按条件查询单个对象
     *
     * @return GiveWork
     */
    public GiveWork selectObjectByGiveWork(GiveWork giveWork);


    /**
     * 查询交路数量
     *
     * @param workDate
     * @return
     */
    int selectRoadNum(String workDate);

    /**
     * 查询派班人员数量
     *
     * @param workDate
     * @return
     */
    int selectUserNum(String workDate);

    /**
     * 查询上次叫板时间
     *
     * @param roadId
     * @return
     */
    String lastRemindTime(String roadId);
}
